Skip to content

Conversation

@Stream-SDK-Bot
Copy link
Collaborator

✅ Added

  • Add the maxGalleryAssetsCount to the composer config #1053
  • Expose QuotedMessageViewContainer #1056
  • Add QuotedMessageContentView and ViewFactory.makeQuotedMessageContentView() #1056
  • Allow customizing the attachment size and avatar size of the quoted message view #1056

🐞 Fixed

  • Fix channel list skipping some updates on iPad #1059

Stream Bot and others added 7 commits November 18, 2025 18:56
* Allow changing the attachment size and author avatar size of quoted message view

* Add new `QuotedMessageContentView`

* Allow customizing the `QuotedMessageContentView`

* Add test coverage to custom quoted avatar sizes

* Remove unnecessary option

* Add test coverage to custom quoted content view

* Update CHANGELOG.md

* Fix linter

* [CI] Snapshots (#1057)

* Move quotedMessage inside the `QuotedMessageContentViewOptions`

---------

Co-authored-by: Stream SDK Bot <[email protected]>
@Stream-SDK-Bot Stream-SDK-Bot requested a review from a team as a code owner December 2, 2025 16:41
@github-actions
Copy link

github-actions bot commented Dec 2, 2025

1 Warning
⚠️ Big PR

Generated by 🚫 Danger

@github-actions
Copy link

github-actions bot commented Dec 2, 2025

Public Interface

+ public struct QuotedMessageViewContainer: View  
+ 
+   public var factory: Factory
+   public var quotedMessage: ChatMessage
+   public var fillAvailableSpace: Bool
+   public var forceLeftToRight: Bool
+   @Binding public var scrolledId: String?
+   public let attachmentSize: CGSize
+   public let quotedAuthorAvatarSize: CGSize
+   public var body: some View
+   
+ 
+   public init(factory: Factory,quotedMessage: ChatMessage,fillAvailableSpace: Bool,forceLeftToRight: Bool = false,scrolledId: Binding<String?>,attachmentSize: CGSize = CGSize(width: 36, height: 36),quotedAuthorAvatarSize: CGSize = CGSize(width: 24, height: 24))

+ public struct QuotedMessageContentViewOptions  
+ 
+   public let quotedMessage: ChatMessage
+   public let fillAvailableSpace: Bool
+   public let attachmentSize: CGSize
+   
+ 
+   public init(quotedMessage: ChatMessage,fillAvailableSpace: Bool,attachmentSize: CGSize = CGSize(width: 36, height: 36))

+ public struct QuotedMessageContentView: View  
+ 
+   public var factory: Factory
+   public var options: QuotedMessageContentViewOptions
+   public var body: some View
+   
+ 
+   public init(factory: Factory,options: QuotedMessageContentViewOptions)



 public struct ComposerConfig  
-   public var inputPaddingsConfig: PaddingsConfig
+   public var maxGalleryAssetsCount: Int?
-   public var adjustMessageOnSend: (String) -> (String)
+   public var inputPaddingsConfig: PaddingsConfig
-   public var adjustMessageOnRead: (String) -> (String)
+   public var adjustMessageOnSend: (String) -> (String)
-   @available(
+   public var adjustMessageOnRead: (String) -> (String)
-         *,
+   @available(
-         deprecated,
+         *,
-         message: """
+         deprecated,
-         Override the MessageComposerViewModel.inputAttachmentsAsPayloads() in order to convert the message attachments to payloads.
+         message: """
-         """
+         Override the MessageComposerViewModel.inputAttachmentsAsPayloads() in order to convert the message attachments to payloads.
-     ) public var attachmentPayloadConverter: (ChatMessage) -> [AnyAttachmentPayload]
+         """
-   public static var defaultAttachmentPayloadConverter: (ChatMessage) -> [AnyAttachmentPayload]
+     ) public var attachmentPayloadConverter: (ChatMessage) -> [AnyAttachmentPayload]
-   
+   public static var defaultAttachmentPayloadConverter: (ChatMessage) -> [AnyAttachmentPayload]
- 
+   
-   public init(isVoiceRecordingEnabled: Bool = false,inputViewMinHeight: CGFloat = 38,inputViewMaxHeight: CGFloat = 76,inputViewCornerRadius: CGFloat = 20,inputFont: UIFont = UIFont.preferredFont(forTextStyle: .body),gallerySupportedTypes: GallerySupportedTypes = .imagesAndVideo,inputPaddingsConfig: PaddingsConfig = .composerInput,adjustMessageOnSend: @escaping (String) -> (String) = { $0 },adjustMessageOnRead: @escaping (String) -> (String) = { $0 },attachmentPayloadConverter: @escaping (ChatMessage) -> [AnyAttachmentPayload]
+ 
-             = ComposerConfig.defaultAttachmentPayloadConverter)
+   public init(isVoiceRecordingEnabled: Bool = false,inputViewMinHeight: CGFloat = 38,inputViewMaxHeight: CGFloat = 76,inputViewCornerRadius: CGFloat = 20,inputFont: UIFont = UIFont.preferredFont(forTextStyle: .body),gallerySupportedTypes: GallerySupportedTypes = .imagesAndVideo,maxGalleryAssetsCount: Int? = nil,inputPaddingsConfig: PaddingsConfig = .composerInput,adjustMessageOnSend: @escaping (String) -> (String) = { $0 },adjustMessageOnRead: @escaping (String) -> (String) = { $0 },attachmentPayloadConverter: @escaping (ChatMessage) -> [AnyAttachmentPayload]
+             = ComposerConfig.defaultAttachmentPayloadConverter)

 extension ViewFactory  
-   public func makeCustomAttachmentQuotedView(for message: ChatMessage)-> some View
+   public func makeQuotedMessageContentView(options: QuotedMessageContentViewOptions)-> some View
-   public func makeEditedMessageHeaderView(editedMessage: Binding<ChatMessage?>)-> some View
+   public func makeCustomAttachmentQuotedView(for message: ChatMessage)-> some View
-   public func makeCommandsContainerView(suggestions: [String: Any],handleCommand: @escaping ([String: Any]) -> Void)-> some View
+   public func makeEditedMessageHeaderView(editedMessage: Binding<ChatMessage?>)-> some View
-   public func makeMessageReadIndicatorView(channel: ChatChannel,message: ChatMessage)-> some View
+   public func makeCommandsContainerView(suggestions: [String: Any],handleCommand: @escaping ([String: Any]) -> Void)-> some View
-   public func makeNewMessagesIndicatorView(newMessagesStartId: Binding<String?>,count: Int)-> some View
+   public func makeMessageReadIndicatorView(channel: ChatChannel,message: ChatMessage)-> some View
-   public func makeJumpToUnreadButton(channel: ChatChannel,onJumpToMessage: @escaping () -> Void,onClose: @escaping () -> Void)-> some View
+   public func makeNewMessagesIndicatorView(newMessagesStartId: Binding<String?>,count: Int)-> some View
-   public func makeComposerPollView(channelController: ChatChannelController,messageController: ChatMessageController?)-> some View
+   public func makeJumpToUnreadButton(channel: ChatChannel,onJumpToMessage: @escaping () -> Void,onClose: @escaping () -> Void)-> some View
-   public func makePollView(message: ChatMessage,poll: Poll,isFirst: Bool)-> some View
+   public func makeComposerPollView(channelController: ChatChannelController,messageController: ChatMessageController?)-> some View
-   public func makeThreadDestination()-> (ChatThread) -> ChatChannelView<Self>
+   public func makePollView(message: ChatMessage,poll: Poll,isFirst: Bool)-> some View
-   public func makeThreadListItem(thread: ChatThread,threadDestination: @escaping (ChatThread) -> ThreadDestination,selectedThread: Binding<ThreadSelectionInfo?>)-> some View
+   public func makeThreadDestination()-> (ChatThread) -> ChatChannelView<Self>
-   public func makeNoThreadsView()-> some View
+   public func makeThreadListItem(thread: ChatThread,threadDestination: @escaping (ChatThread) -> ThreadDestination,selectedThread: Binding<ThreadSelectionInfo?>)-> some View
-   public func makeThreadsListErrorBannerView(onRefreshAction: @escaping () -> Void)-> some View
+   public func makeNoThreadsView()-> some View
-   public func makeThreadListLoadingView()-> some View
+   public func makeThreadsListErrorBannerView(onRefreshAction: @escaping () -> Void)-> some View
-   public func makeThreadListContainerViewModifier(viewModel: ChatThreadListViewModel)-> some ViewModifier
+   public func makeThreadListLoadingView()-> some View
-   public func makeThreadListHeaderViewModifier(title: String)-> some ViewModifier
+   public func makeThreadListContainerViewModifier(viewModel: ChatThreadListViewModel)-> some ViewModifier
-   public func makeThreadListHeaderView(viewModel: ChatThreadListViewModel)-> some View
+   public func makeThreadListHeaderViewModifier(title: String)-> some ViewModifier
-   public func makeThreadListFooterView(viewModel: ChatThreadListViewModel)-> some View
+   public func makeThreadListHeaderView(viewModel: ChatThreadListViewModel)-> some View
-   public func makeThreadListBackground(colors: ColorPalette)-> some View
+   public func makeThreadListFooterView(viewModel: ChatThreadListViewModel)-> some View
-   public func makeThreadListItemBackground(thread: ChatThread,isSelected: Bool)-> some View
+   public func makeThreadListBackground(colors: ColorPalette)-> some View
-   public func makeThreadListDividerItem()-> some View
+   public func makeThreadListItemBackground(thread: ChatThread,isSelected: Bool)-> some View
-   public func makeAddUsersView(options: AddUsersOptions,onUserTap: @escaping (ChatUser) -> Void)-> some View
+   public func makeThreadListDividerItem()-> some View
-   public func makeAttachmentTextView(options: AttachmentTextViewOptions)-> some View
+   public func makeAddUsersView(options: AddUsersOptions,onUserTap: @escaping (ChatUser) -> Void)-> some View
+   public func makeAttachmentTextView(options: AttachmentTextViewOptions)-> some View

 public struct QuotedMessageView: View  
-   public var body: some View
+   public let attachmentSize: CGSize
-   
+   public var body: some View
- 
+   
-   public init(factory: Factory,quotedMessage: ChatMessage,fillAvailableSpace: Bool,forceLeftToRight: Bool)
+ 
+   public init(factory: Factory,quotedMessage: ChatMessage,fillAvailableSpace: Bool,forceLeftToRight: Bool,attachmentSize: CGSize = CGSize(width: 36, height: 36))

@github-actions
Copy link

github-actions bot commented Dec 2, 2025

Build for regression testing №135 has been uploaded to TestFlight 🎁

@Stream-SDK-Bot
Copy link
Collaborator Author

SDK Size

title previous release current release diff status
StreamChatSwiftUI 9.63 MB 9.68 MB +52 KB 🟢

@sonarqubecloud
Copy link

sonarqubecloud bot commented Dec 2, 2025

@Stream-SDK-Bot
Copy link
Collaborator Author

StreamChatSwiftUI XCSize

Object Diff (bytes)
QuotedMessageView.o +45961
FileAttachmentView.o -1436
ChatChannelList.o +1328
ChatChannelListItem.o +1204
SearchResultsView.o +1128
Show 22 more objects
Object Diff (bytes)
Images.o -692
ChatChannelNavigatableListItem.o +676
DefaultViewFactory.o +616
ChatThreadListNavigatableItem.o +600
ChatChannelSwipeableListItem.o +496
PinnedMessagesView.o +492
PollAllOptionsView.o -448
MessageComposerViewModel.o +411
MessageAvatarView.o -392
ChatThreadList.o +372
ChatChannelHeaderViewModifier.o +360
ComposerConfig.o +300
ChatThreadListItem.o +240
MessageListView.o +224
MessageContainerView.o +208
ReactionsOverlayView.o +152
MessageView.o -112
ViewFactory.o +102
ChatChannelListViewModel.o +98
PollCommentsView.o -72
MessageBubble.o +68
Utils.o +52

@testableapple
Copy link
Contributor

/merge release

@testableapple
Copy link
Contributor

Publication of the release has been launched 👍

@github-actions github-actions bot merged commit d1c72a0 into main Dec 2, 2025
12 checks passed
@github-actions github-actions bot deleted the release/4.94.0 branch December 2, 2025 17:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants